package com.example.seed.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.support.TaskExecutorAdapter;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

/**
 * 异步任务
 */
@Configuration
@EnableAsync
public class AsyncTaskConfiguration implements AsyncConfigurer {

    /**
     * 获取一个异步执行器，该执行器为每个任务创建一个新的线程。
     *
     * @return Executor 返回一个适应于异步任务执行的执行器。
     */
    @Override
    public Executor getAsyncExecutor() {
        // 创建一个线程池，其中每个线程都是虚拟线程，并且线程名称以"virtual-async#"为前缀
        return new TaskExecutorAdapter(Executors.newThreadPerTaskExecutor(Thread.ofVirtual().name("virtual-async#", 1).factory()));
    }
}